home *** CD-ROM | disk | FTP | other *** search
/ Amoszine 8 / Amoszine 8 (Disk 2 of 3).adf / F2-Editor.lha / Editor.AMOS / Editor.amosSourceCode < prev    next >
Encoding:
AMOS Source Code  |  1992-10-23  |  40.9 KB  |  1,663 lines

  1. Rem Fortress II Map Editor 
  2. Rem     By Lee Bamber  
  3. '
  4. Rem   Started: 19-07-94
  5. '
  6. Set Buffer 150
  7. Bob Update Off : Autoback OFF
  8. '
  9. TT=40
  10. Dim TWN$(TT)
  11. Dim TWN(TT,50) : Rem Town Details 
  12. '
  13. Rem THIS IMPORTANT!! must do!  
  14. PERSON=1
  15. For T=1 To TT
  16.  TWN$(T)="UNKNOWN"
  17.  TWN(T,0)=1 : Rem number of people 
  18.  TWN(T,1)=PERSON
  19.  TWN(T,2)=PERSON+1
  20.  TWN(T,3)=PERSON+2
  21.  TWN(T,4)=PERSON+3
  22.  TWN(T,5)=PERSON+4
  23.  PERSON=PERSON+5
  24. Next T
  25. '
  26. Dim CARM$(50),CARM(50,80)
  27. '
  28. YOURCOLOUR=1
  29. NEUTRAL=0
  30. '
  31. Dim FACES(205,8) : Rem Details for each person on World 
  32. AA=0 : Restore FACEORDER
  33. For F=1 To PERSON
  34.     Read A : AA=AA+1
  35.     If AA=5 : AA=0 : Restore FACEORDER : End If 
  36.     FACES(F,0)=A
  37.     FACES(F,1)=1+Rnd(3) : FACES(F,2)=1+Rnd(3)
  38.     FACES(F,3)=1+Rnd(3) : FACES(F,4)=1+Rnd(3)
  39.     FACES(F,5)=Rnd(4) : FACES(F,6)=Rnd(4)
  40.     FACES(F,7)=Rnd(4) : FACES(F,8)=Rnd(4)
  41. Next F
  42. Goto _FACEORDEREND
  43. FACEORDER:
  44. Data 1,0,2,3,4
  45. _FACEORDEREND:
  46. '
  47. Rem for townfont 
  48. Dim TX(26)
  49. Global TX(),A,TX,TY,T$
  50. '
  51. Dim FINDER(100,5) : Rem Used to store all path ranges from each location 
  52. Rem 0=index of plot (index is for finder array, not plt array) 
  53. Rem 1=path nmber 
  54. Rem 2,3 = range from,to of all other finder elements from this one 
  55. Rem 4,5 = range from,to (second set)   
  56. '
  57. Dim FPLT(100) : Rem COnverstion table from PLT to FINDER INDEX NUMBERS 
  58. '
  59. MAPW=10 : MAPL=10 : HOS=7
  60. Dim MAP(MAPW*11,MAPL*HOS) : Rem Map of terrain 
  61. Dim SEC(MAPW*11,MAPL*HOS) : Rem Map of trees & second terrains 
  62. Dim OBJ(MAPW*11,MAPL*HOS) : Rem Map of buildings 
  63. '
  64. Dim PATH(100,11)
  65. PATHMAX=0
  66. '
  67. Dim BLK(80,2)
  68. Rem Block Vectors
  69. BLK(1,0)=16 : BLK(1,1)=10
  70. Rem priority trees(frontal heights)
  71. BLK(38,2)=1 : BLK(40,2)=1 : BLK(41,2)=1
  72. BLK(42,2)=1 : BLK(43,2)=1 : BLK(45,2)=1
  73. '
  74. Rem OFFSETS For Plot ENTRY/EXIT
  75. Dim PLTOFF(11,1)
  76. PLTOFF(1,0)=19 : PLTOFF(1,1)=28
  77. PLTOFF(2,0)=19 : PLTOFF(2,1)=28
  78. PLTOFF(3,0)=19 : PLTOFF(3,1)=28
  79. PLTOFF(4,0)=19 : PLTOFF(4,1)=28
  80. PLTOFF(5,0)=19 : PLTOFF(5,1)=28
  81. PLTOFF(6,0)=19 : PLTOFF(6,1)=28
  82. PLTOFF(7,0)=44 : PLTOFF(7,1)=15
  83. PLTOFF(8,0)=44 : PLTOFF(8,1)=15
  84. PLTOFF(9,0)=44 : PLTOFF(9,1)=15
  85. PLTOFF(10,0)=44 : PLTOFF(10,1)=15
  86. PLTOFF(11,0)=44 : PLTOFF(11,1)=15
  87. '
  88. Rem Plots for all 'goto' areas 
  89. Dim PLT(50,3)
  90. Rem ,0=
  91. Rem ,1=  
  92. Rem ,2=  
  93. Rem ,3=town index value
  94. '
  95. Dim PROMPT$(2)
  96. PROMPT$(1)="Draw"
  97. PROMPT$(2)="Path"
  98. '
  99. Gosub _GRAB_GENERAL_MAPSTUFF
  100. '
  101. Screen Open 2,320,10,2,Lowres : Flash Off : Curs Off 
  102. Screen Open 1,320,256,32,Lowres : Flash Off : Curs Off : Screen Hide 1
  103. Screen Open 0,320,256,32,Lowres : Flash Off : Curs Off : Screen Hide 0
  104. '
  105. Rem Box Pointer
  106. Cls 0 : Ink 8 : Box 0,0 To 33,33 : Get Bob 10,0,0 To 34,34
  107. '
  108. Rem Path Pointer 
  109. Cls 0 : Ink 8 : Polyline 0,0 To 5,0 To 0,5 To 0,0 : Get Bob 11,0,0 To 6,6
  110. '
  111. Rem Plot pointer 
  112. Cls 0 : Ink 8 : Polyline 0,0 To 10,5 To 5,10 To 0,0 : Get Bob 12,0,0 To 11,11
  113. '
  114. Screen 0 : Load Iff "mapbitsv7.iff",0
  115. Bob 1,1,1,1
  116. '
  117. Screen 1
  118. Get Palette 0
  119. Cls 2
  120. Gosub _INITIAL_MAP
  121. Double Buffer 
  122. Screen Display 1,,53,,
  123. '
  124. Screen 2
  125. Colour 0,0 : Colour 1,$FFF : Cls 1
  126. Ink 0,1 : Text 0,8,("Fortress II Map Editor")
  127. Screen To Front 2 : Screen Display 2,,44,,
  128. '
  129. SX=0 : SY=0
  130. SCR=0 : S1Y=8
  131. STATE=1 : GRON=0
  132. HIGH=1
  133. '
  134. Rem Clear index-finder 
  135. FINDERMAX=1
  136. Rem clear finder list
  137. SUBMAX=0
  138. '
  139. Rem Max values for Town array, also used to add new entries
  140. WHERETOWNMAX=0
  141. Rem same, but for FORT (LIMITED Entry requirements)
  142. WHEREFORTMAX=0
  143. '
  144. Screen Display 0,,45+S1Y,,
  145. Screen To Front 0
  146. Limit Mouse 133,60 To 127+304,45+250
  147. Change Mouse 2
  148. '
  149. Gosub _HELP_PAGE
  150. '
  151. FLN$="-1" : Gosub _LOAD_WORLD
  152. '
  153. Screen Show 1
  154. Do 
  155.    '
  156.    Screen 2 : Text 280,8,PROMPT$(STATE)
  157.    '
  158.    Screen SCR
  159.    '
  160.    K$=Lower$(Inkey$) : SC=Scancode : Clear Key 
  161.    If SCR=0 and SC=95 : Gosub _HELP_PAGE : End If 
  162.    MX=X Screen(X Mouse) : MY=Y Screen(Y Mouse)
  163.    MF=Mouse Key
  164.    If MF=0 : FMF=0 : End If 
  165.    If K$="_" : Gosub _CHECKVARS : End If 
  166.    '
  167.    If SCR=1
  168.       Rem What On? 
  169.       X=SX+(MX/32) : Y=SY+(MY/32)
  170.       If OBJ(X,Y)=0
  171.          If SEC(X,Y)=0
  172.             If MAP(X,Y)=0
  173.                GRON=0
  174.             Else 
  175.                GRON=MAP(X,Y)
  176.             End If 
  177.          Else 
  178.             GRON=SEC(X,Y)
  179.          End If 
  180.       Else 
  181.          GRON=OBJ(X,Y)
  182.       End If 
  183.       If GRON>=100 : GRONREV=2 : GRON=GRON-100 : Else GRONREV=1 : End If 
  184.    End If 
  185.    '
  186.    Bob Clear 
  187.    '
  188.    Gosub _MENU
  189.    '
  190.    If K$=" "
  191.       X=MX/32 : Y=MY/32
  192.       For SST=0 To 1
  193.          Bob Clear 
  194.          Gosub _SANDWITCH
  195.          Bob Draw 
  196.          Screen Swap : Wait Vbl 
  197.       Next SST
  198.       Bob Clear 
  199.    End If 
  200.    '
  201.    Screen To Front 2
  202.    '
  203.    If SCR=0 : Wait Vbl : End If 
  204.    If GRAB=0
  205.       If STATE=2 and SCR=1
  206.          Bob 1+SCR,-1+((Int(MX/32))*32),-1+((Int((MY-S1Y)/32))*32),10
  207.          If GRONREV=1
  208.             Bob 3+SCR,((Int(MX/32))*32)+BLK(GRON,0),((Int((MY-S1Y)/32))*32)+BLK(GRON,1),11
  209.          Else 
  210.             Bob 3+SCR,((Int(MX/32))*32)+(31-BLK(GRON,0)),((Int((MY-S1Y)/32))*32)+BLK(GRON,1),Hrev(11)
  211.          End If 
  212.       Else 
  213.          Bob 1+SCR,-1+((Int(MX/32))*32),-1+((Int((MY-S1Y)/32))*32),10
  214.          Bob Off 3+SCR
  215.       End If 
  216.    Else 
  217.       If GRABREV=0
  218.          Bob 1+SCR,((Int(MX/32))*32),((Int((MY-S1Y)/32))*32),2
  219.       Else 
  220.          Bob 1+SCR,((Int(MX/32))*32)+32,((Int((MY-S1Y)/32))*32),Hrev(2)
  221.       End If 
  222.       Bob Off 3+SCR
  223.    End If 
  224.    '
  225.    Bob Draw 
  226.    Screen Swap : Wait Vbl 
  227.    '
  228. Loop 
  229. '
  230. _MENU:
  231. '
  232. Rem General keys 
  233. If MF=0
  234.    '
  235.    Gosub _PLACE_KEYS
  236.    Gosub _FINDER_KEYS
  237.    '
  238.    If K$="p" : If STATE=1 : STATE=2 : Gosub _UPDATE_PLTOFFS : Else STATE=1 : Gosub _INITIAL_MAP : End If : End If 
  239.    If STATE=2 and SCR=1 and GRONREV=1
  240.       If K$="," and BLK(GRON,0)>0 : BLK(GRON,0)=BLK(GRON,0)-1 : End If 
  241.       If K$="." and BLK(GRON,0)<31 : BLK(GRON,0)=BLK(GRON,0)+1 : End If 
  242.       If K$="a" and BLK(GRON,1)>0 : BLK(GRON,1)=BLK(GRON,1)-1 : End If 
  243.       If K$="z" and BLK(GRON,1)<32 : BLK(GRON,1)=BLK(GRON,1)+1 : End If 
  244.    End If 
  245.    If K$=":"
  246.       Rem change PATHMAX Value 
  247.       Clear Key 
  248.       Input "PATHMAX VALUE>";PATHMAX : Bell 
  249.       Clear Key 
  250.    End If 
  251.    If K$=";" and PATHMAX>0
  252.       Rem change PATHMAX Value 
  253.       PATHMAX=PATHMAX-1 : Wait 45 : Bell 
  254.       Clear Key 
  255.    End If 
  256.    If K$="f" or K$="a"
  257.       Change Mouse 3
  258.       If K$="f"
  259.          OLDPLTMAX=PLTMAX
  260.       Else 
  261.          OLDPLTMAX=0
  262.          PLTMAX=0
  263.       End If 
  264.       For Y=0 To(MAPL*HOS)
  265.         For X=0 To(MAPW*10)
  266.             A=OBJ(X,Y) : If Y>0 : A2=OBJ(X,Y-1) : End If 
  267.             If A=51 or A=53 or A=54 or A=57 or A=59 or A=60 or A=62 or A=66 or A=73 or A=79
  268.                SRCHOK=0
  269.                If OLDPLTMAX>0
  270.                  For SRCH=0 To OLDPLTMAX
  271.                    If PLT(SRCH,1)=X and PLT(SRCH,2)=Y
  272.                       SRCHOK=1
  273.                    End If 
  274.                  Next SRCH
  275.                End If 
  276.                If SRCHOK=0
  277.                   If A=51 : PLT(PLTMAX,0)=1 : End If 
  278.                   If A=53 : PLT(PLTMAX,0)=2 : End If 
  279.                   If A=54 : PLT(PLTMAX,0)=3 : End If 
  280.                   If A=57 : PLT(PLTMAX,0)=4 : End If 
  281.                   If A=59 : PLT(PLTMAX,0)=5 : End If 
  282.                   If A=60 : PLT(PLTMAX,0)=6 : End If 
  283.                   If A=62 and A2=61 : PLT(PLTMAX,0)=7 : End If 
  284.                   If A=62 and A2=64 : PLT(PLTMAX,0)=8 : End If 
  285.                   If A=66 : PLT(PLTMAX,0)=9 : End If 
  286.                   If A=73 : PLT(PLTMAX,0)=10 : End If 
  287.                   If A=79 : PLT(PLTMAX,0)=11 : End If 
  288.                   PLT(PLTMAX,1)=X
  289.                   PLT(PLTMAX,2)=Y
  290.                   PLTMAX=PLTMAX+1
  291.                End If 
  292.             End If 
  293.         Next X
  294.       Next Y
  295.       PLTMAX=PLTMAX-1
  296.       Gosub _INITIAL_MAP
  297.       Change Mouse 2
  298.    End If 
  299.    If K$="s" : Gosub _SAVE_WORLD : End If 
  300.    If K$="l" : Gosub _LOAD_WORLD : End If 
  301.    If K$="j" and SCR=0 : K$="" : SCR=1 : S1YY=S1Y : S1Y=0 : Screen To Front 1 : Screen 1 : End If 
  302.    If K$="j" and SCR=1 : SCR=0 : S1Y=S1YY : Screen To Front 0 : Screen 0 : End If 
  303.    If K$="x"
  304.    If GRABREV=0 : GRABREV=1 : Else GRABREV=0 : End If 
  305.    End If 
  306.    If SC=89 and HIGH=1
  307.       SC=0 : HIGH=0 : Screen Hide 2
  308.       S1Y=0
  309.       Screen Display 0,,45+S1Y,,
  310.       Screen Display 1,,45,,
  311.    End If 
  312.    If SC=89 and HIGH=0
  313.       HIGH=1 : Screen Show 2
  314.       Screen Display 1,,53,,
  315.    End If 
  316. End If 
  317. '
  318. If((MF=2 and FMF=0) or(K$="b")) and GRAB>0
  319.    If MF=2 : MF=0 : FMF=1 : End If 
  320.    GRAB=0 : GRABREV=0
  321. End If 
  322. '
  323. Rem All keys for BITS Screen   
  324. If SCR=0
  325.    If SC=77 and S1Y>0 and HIGH=1
  326.       S1Y=S1Y-8
  327.       Screen Display 0,,45+S1Y,,
  328.    End If 
  329.    If SC=76 and S1Y<8 and HIGH=1
  330.       S1Y=S1Y+8
  331.       Screen Display 0,,45+S1Y,,
  332.    End If 
  333.    '
  334.    If MF=1 and GRAB=0
  335.       GRAB=(1+(Int(MX/32))+(Int((MY-S1Y)/32))*10)
  336.       GRABREV=0
  337.       Get Bob 2,((Int(MX/32))*32),((Int((MY-S1Y)/32))*32) To((Int(MX/32))*32)+32,((Int((MY-S1Y)/32))*32)+32
  338.    End If 
  339.    '
  340. End If 
  341. '
  342. Rem All keys for MAP Screen
  343. If SCR=1
  344.    '
  345.    If SC=76 or SC=77 or SC=78 or SC=79
  346.       S=0
  347.       If SC=76 and SY>0 : SY=SY-1 : S=1 : End If 
  348.       If SC=77 and SY<(MAPL*HOS)-HOS : SY=SY+1 : S=2 : End If 
  349.       If SC=79 and SX>0 : SX=SX-1 : S=4 : End If 
  350.       If SC=78 and SX<(MAPW*10)-10 : SX=SX+1 : S=8 : End If 
  351.       Bob Off 
  352.       For SST=0 To 1
  353.          Bob Clear 
  354.          If S=1 : Rem up 
  355.             Screen Copy 1,0,0,320,256-32 To 1,0,32
  356.             Y=0
  357.             For X=0 To 9 : Gosub _SANDWITCH : Next X
  358.          End If 
  359.          If S=2 : Rem down 
  360.             Screen Copy 1,0,32,320,256 To 1,0,0
  361.             Y=HOS
  362.             For X=0 To 9 : Gosub _SANDWITCH : Next X
  363.          End If 
  364.          If S=4 : Rem left 
  365.             Screen Copy 1,0,0,320-32,256 To 1,32,0
  366.             X=0
  367.             For Y=0 To HOS : Gosub _SANDWITCH : Next Y
  368.          End If 
  369.          If S=8 : Rem right  
  370.             Screen Copy 1,32,0,320,256 To 1,0,0
  371.             X=9
  372.             For Y=0 To HOS : Gosub _SANDWITCH : Next Y
  373.          End If 
  374.          Bob Draw 
  375.          Screen Swap : Wait Vbl 
  376.       Next SST
  377.       Bob Clear 
  378.       Gosub _UPDATE_PLTOFFS
  379.    End If 
  380.    '
  381.    If STATE=1 : Gosub _IMAGE_CLICKS : End If 
  382.    If STATE=2 : Gosub _PATH_CLICKS : End If 
  383.    If K$="*"
  384.       For P=0 To PATHMAX
  385.         For TT=0 To 10
  386.           PATH(P,TT)=0
  387.         Next TT
  388.       Next P
  389.       PATHMAX=0
  390.    End If 
  391.    '
  392.    '
  393. End If 
  394. '
  395. Return 
  396. '
  397. _FINDER_KEYS:
  398.    '
  399.    If K$="("
  400.       Rem Clear index-finder 
  401.       FINDERMAX=1 : SUBMAX=0
  402.    End If 
  403.    If K$="^"
  404.       Rem Print all index-finder locations 
  405.       For F=0 To FINDERMAX-1
  406.         Ink 8,0,0 : Text((PLT(FPLT(F),1)-SX)*32)+12,((PLT(FPLT(F),2)-SY)*32)+24,Str$(F)
  407.       Next F
  408.    End If 
  409.    If K$="%"
  410.       Rem Compile index-finder list
  411.       '
  412.       Screen Open 6,320,256,2,Lowres
  413.       Screen 6
  414.       Colour 0,$2 : Colour 1,$CCF
  415.       Pen 1 : Paper 0
  416.       Cls 0
  417.       Locate 1,1 : Centre "Finder List"
  418.       '
  419.       FB=0 : FAUTO=1
  420.       Locate 0,2 : Print "     TOWN  DEST     RANGE TOWARDS DEST  ";
  421.       Locate 0,3 : Print "SUB  INDX  TOWN  R1FROM R1TO R2FROM R2TO";
  422.       Locate 0,4 : Print "----------------------------------------";
  423.       Goto _FLIST
  424.       '
  425.       _FMAIN:
  426.        '
  427.        Locate 0,25
  428.        Input ">";SUB; : Rem which one
  429.        If SUB>0 and SUB<=SUBMAX
  430.           Rem change existing one
  431.           INDX=FINDER(SUB,0)
  432.           PATH=FINDER(SUB,1)
  433.           R1F=FINDER(SUB,2)
  434.           R1T=FINDER(SUB,3)
  435.           R2F=FINDER(SUB,4)
  436.           R2T=FINDER(SUB,5)
  437.           Locate 5,25 : If INDX<>0 : Put Key Str$(INDX) : End If : Input "";INDX;
  438.           Locate 11,25 : If PATH<>0 : Put Key Str$(PATH) : End If : Input "";PATH;
  439.           Locate 17,25 : If R1F<>0 : Put Key Str$(R1F) : End If : Input "";R1F;
  440.           Locate 23,25 : If R1T<>0 : Put Key Str$(R1T) : End If : Input "";R1T;
  441.           Locate 28,25 : If R2F<>0 : Put Key Str$(R2F) : End If : Input "";R2F;
  442.           Locate 34,25 : If R2T<>0 : Put Key Str$(R2T) : End If : Input "";R2T;
  443.           Locate 0,26 : Input "Are you sure? (Y/N)>";R$; : Cline 
  444.           If(R$="y") or(R$="Y")
  445.              FINDER(SUB,0)=INDX
  446.              FINDER(SUB,1)=PATH
  447.              FINDER(SUB,2)=R1F
  448.              FINDER(SUB,3)=R1T
  449.              FINDER(SUB,4)=R2F
  450.              FINDER(SUB,5)=R2T
  451.           End If 
  452.           Locate 0,25 : Print ""; : Cline 
  453.        Else 
  454.           Rem new
  455.           Locate 5,25 : Input "";INDX;
  456.           Locate 11,25 : Input "";PATH;
  457.           Locate 17,25 : Input "";R1F;
  458.           Locate 23,25 : Input "";R1T;
  459.           Locate 28,25 : Input "";R2F;
  460.           Locate 34,25 : Input "";R2T;
  461.           Locate 0,26 : Input "Are you sure? (Y/N/QUIT/SHOW/CLB)>";R$; : Cline 
  462.           If Upper$(R$)="QUIT" : Goto _FEND : End If 
  463.           If(R$="y") or(R$="Y")
  464.              SUB=SUBMAX
  465.              FINDER(SUB,0)=INDX
  466.              FINDER(SUB,1)=PATH
  467.              FINDER(SUB,2)=R1F
  468.              FINDER(SUB,3)=R1T
  469.              FINDER(SUB,4)=R2F
  470.              FINDER(SUB,5)=R2T
  471.              SUBMAX=SUBMAX+1
  472.           End If 
  473.           Locate 0,25 : Print ""; : Cline 
  474.        End If 
  475.        If Upper$(R$)="SHOW"
  476.           Locate 0,26 : Input "Set page position FB(-1 to auto)?";FB; : Cline 
  477.           If FB=-1
  478.              FAUTO=1
  479.           Else 
  480.              FAUTO=0
  481.           End If 
  482.        End If 
  483.        Goto _FLIST
  484.        Clear Key 
  485.        '
  486.       Goto _FMAIN
  487.       '
  488.       _FLIST:
  489.        '
  490.        FR=10 : If SUBMAX<10 : FR=SUBMAX : End If 
  491.        If FAUTO=1
  492.           FB=0 : If SUBMAX>=10 : FB=SUBMAX-10 : End If 
  493.        End If 
  494.        For F=0 To FR-1
  495.          Locate 0,5+F : Print Space$(40);
  496.          If FB+F<SUBMAX
  497.             Locate 1,5+F : Print FB+F
  498.             Locate 5,5+F : Print "";FINDER(FB+F,0);
  499.             Locate 11,5+F : Print "";FINDER(FB+F,1);
  500.             Locate 17,5+F : Print "";FINDER(FB+F,2);
  501.             Locate 23,5+F : Print "";FINDER(FB+F,3);
  502.             Locate 28,5+F : Print "";FINDER(FB+F,4);
  503.             Locate 34,5+F : Print "";FINDER(FB+F,5);
  504.          End If 
  505.        Next F
  506.        '
  507.       Goto _FMAIN
  508.       _FEND:
  509.       '
  510.       Screen Close 6
  511.       '
  512.    End If 
  513.    If K$="`"
  514.       Clear Key 
  515.       Rem Enter an index-finder plot converstion 
  516.       X=SX+(MX/32) : Y=SY+(MY/32)
  517.       A=OBJ(X,Y) : If Y>0 : A2=OBJ(X,Y-1) : End If 
  518.       If A=51 or A=53 or A=54 or A=57 or A=59 or A=60 or A=62 or A=66 or A=73 or A=79
  519.          Rem A positional entity (can walk to it) 
  520.          PP=-1
  521.          For P=0 To PLTMAX
  522.            If PLT(P,1)=X and PLT(P,2)=Y
  523.               PP=P
  524.            End If 
  525.          Next P
  526.          If PP<>-1
  527.             Rem Found PLT at plot now selecting  
  528.             Rem Put the real PLT index into a table refering to finder index!
  529.             FPLT(FINDERMAX)=PP
  530.             FINDERMAX=FINDERMAX+1
  531.          End If 
  532.       End If 
  533.    End If 
  534.    '
  535. Return 
  536. '
  537. _PLACE_KEYS:
  538.  '
  539.  If K$="$"
  540.     Rem enter place data, so what is place/
  541.     X=SX+(MX/32) : Y=SY+(MY/32)
  542.     A=OBJ(X,Y) : If Y>0 : A2=OBJ(X,Y-1) : End If 
  543.     If A=51 or A=53 or A=54 or A=57 or A=59 or A=60 or A=62 or A=66 or A=73 or A=79
  544.        Rem A positional entity (can walk to it) 
  545.        PP=-1
  546.        For P=0 To PLTMAX
  547.          If PLT(P,1)=X and PLT(P,2)=Y
  548.             PP=P
  549.          End If 
  550.        Next P
  551.        If PP<>-1
  552.           Rem Found PLT place, so now we get to split between
  553.           Rem TOWN, FORT(complete and ruined) or RAW land  
  554.           If A=51 or A=53 or A=54
  555.              Rem town 
  556.              WHERE=PLT(PP,3)
  557.              If WHERE=0
  558.                 Rem new entry, so take from main stack and use.
  559.                 WHERETOWNMAX=WHERETOWNMAX+1
  560.                 WHERE=WHERETOWNMAX
  561.                 PLT(PP,3)=WHERE
  562.              End If 
  563.              Gosub _TOWNEDIT
  564.           Else 
  565.           If A=987
  566.              Rem absolutely does nothing
  567.              Rem nout!
  568.           Else 
  569.           If A=57 or A=59 or A=62 or A=66 or A=73 or A=79
  570.              Rem fort 
  571.              Rem Only selected and filled during ingame castle selection! 
  572.              WHERE=PLT(PP,3)
  573.              If WHERE=0
  574.                 Rem new entry, so take from main stack and use.
  575.                 WHEREFORTMAX=WHEREFORTMAX+1
  576.                 WHERE=WHEREFORTMAX
  577.                 PLT(PP,3)=WHERE
  578.              End If 
  579.              Gosub _FORTEDIT
  580.           End If : End If : End If 
  581.        End If 
  582.     End If 
  583.  End If 
  584.  '
  585. Return 
  586. '
  587. _TOWNEDIT:
  588.  '
  589.  Screen Open 7,320,256,32,Lowres : Curs Off : Screen Hide 7
  590.  Gosub _GRAB_TOWNBITS
  591.  Screen Open 6,320,256,32,Lowres
  592.  Flash Off : Curs Off 
  593.  Get Palette 0
  594.  Pen 8 : Paper 0 : Cls 0
  595.  Ink 8,0,0
  596.  '  
  597.  Change Mouse 2
  598.  Do 
  599.   '
  600.   Screen 6 : Cls 0
  601.   Locate 0,0 : Centre "Town Editor"
  602.   Locate 0,1 : Print "Town ID=";WHERE
  603.   Locate 20,1 : Print "Town Colour=";TWN(WHERE,15)
  604.   Locate 0,2 : Print "Town Name=";TWN$(WHERE)
  605.   Locate 0,3 : Print "Town Services Total=";TWN(WHERE,0)
  606.   '
  607.   For T=0 To 4
  608.     Ink 0 : Bar(320/5.0)*T,40 To(320/5.0)*T+(320/5.0)-1,100
  609.     Ink 8 : Box(320/5.0)*T,40 To(320/5.0)*T+(320/5.0)-1,70
  610.     Ink 8 : Box(320/5.0)*T,70 To(320/5.0)*T+(320/5.0)-1,100
  611.   Next T
  612.   Locate 0,4 : Print ">:MAYOR:BLCKSMITH:MILITARY:BUILDER:SPY:<"
  613.   '
  614.   Locate 0,13 : Print "Catapult Price>";TWN(WHERE,6)
  615.   Locate 0,14 : Print "Town Income>";TWN(WHERE,7)
  616.   Locate 0,15 : Print "Town Tax>";TWN(WHERE,8)
  617.   Locate 0,16 : Print "Builders Price>";TWN(WHERE,9)
  618.   Locate 0,17 : Print "SpyIndex Number>";TWN(WHERE,10)
  619.   Locate 0,18 : Print "Malitia QTY>";TWN(WHERE,29)
  620.   Locate 0,19 : Print "Malitia Weapon>";TWN(WHERE,30)
  621.   Locate 0,21 : Print "Trainer TYPE>";TWN(WHERE,31);
  622.                 Print "   PRICE>";TWN(WHERE,35)
  623.   Locate 0,22 : Print "Trainer TYPE>";TWN(WHERE,32);
  624.                 Print "   PRICE>";TWN(WHERE,36)
  625.   Locate 0,23 : Print "Trainer TYPE>";TWN(WHERE,33);
  626.                 Print "   PRICE>";TWN(WHERE,37)
  627.   Locate 0,24 : Print "Trainer TYPE>";TWN(WHERE,34);
  628.                 Print "   PRICE>";TWN(WHERE,38)
  629.   Locate 0,28 : Centre "! E X I T !"
  630.   '
  631.   Gosub _UPDATETOWNFACES
  632.   '
  633.   While Mouse Key=0
  634.      MX=X Screen(X Mouse) : MY=Y Screen(Y Mouse)
  635.   Wend 
  636.   '
  637.   Gosub _EDITTOWNBITS
  638.   '
  639.   While Mouse Key<>0 : Wend 
  640.   If MY>180 : Exit : End If 
  641.   '  
  642.  Loop 
  643.  '
  644.  Screen Close 6
  645.  Screen Close 7
  646.  '
  647. Return 
  648. '
  649. _EDITTOWNBITS:
  650.  '
  651.  If MY>=23 and MY<31
  652.     Locate 0,30 : Input "Number of Services>";TWN(WHERE,0); : Cline 
  653.  End If 
  654.  If MY>=15 and MY<23 and MX<160
  655.     Locate 0,30 : Input "Name of Town>";TWN$(WHERE); : Cline 
  656.  End If 
  657.  If MY>=15 and MY<23 and MX>160
  658.     Locate 0,30 : Input "Empire Colour(0=neutral)>";TWN(WHERE,15); : Cline 
  659.  End If 
  660.  '
  661.  If MY>=31 and MY<=100
  662.   TT=-1
  663.   For T=0 To 4
  664.     If MX>=(320/5.0)*T and MX<=(320/5.0)+((320/5.0)*T)
  665.        TT=1+T
  666.     End If 
  667.   Next T
  668.   If TT<>-1
  669.      Rem selected 1,2,3,4,5 
  670.      F=TWN(WHERE,TT)
  671.      If MY>70
  672.         FACES(F,0)=FACES(F,0)+1
  673.         If FACES(F,0)=5 : FACES(F,0)=0 : End If 
  674.      Else 
  675.         FACES(F,1)=1+Rnd(3) : FACES(F,2)=1+Rnd(3)
  676.         FACES(F,3)=1+Rnd(3) : FACES(F,4)=1+Rnd(3)
  677.         FACES(F,5)=Rnd(4) : FACES(F,6)=Rnd(4)
  678.         FACES(F,7)=Rnd(4) : FACES(F,8)=Rnd(4)
  679.      End If 
  680.   End If 
  681.  End If 
  682.  If MY>=101 and MY<160
  683.     Locate 0,13 : Input "Catapult Price>";TWN(WHERE,6)
  684.     Locate 0,14 : Input "Town Income>";TWN(WHERE,7)
  685.     Locate 0,15 : Input "Town Tax>";TWN(WHERE,8)
  686.     Locate 0,16 : Input "Builders Price>";TWN(WHERE,9)
  687.     Locate 0,17 : Input "SpyIndex Number>";TWN(WHERE,10)
  688.     Locate 0,18 : Input "Malitia QTY>";TWN(WHERE,29)
  689.     Locate 0,19 : Input "Malitia Weapon>";TWN(WHERE,30)
  690.  End If 
  691.  If MY>=165 and MY<175
  692.     Locate 0,21 : Input "Trainer TYPE>";TWN(WHERE,31);
  693.                   Input "   PRICE>";TWN(WHERE,35)
  694.     Locate 0,22 : Input "Trainer TYPE>";TWN(WHERE,32);
  695.                   Input "   PRICE>";TWN(WHERE,36)
  696.     Locate 0,23 : Input "Trainer TYPE>";TWN(WHERE,33);
  697.                   Input "   PRICE>";TWN(WHERE,37)
  698.     Locate 0,24 : Input "Trainer TYPE>";TWN(WHERE,34);
  699.                   Input "   PRICE>";TWN(WHERE,38)
  700.  End If 
  701.  '
  702. Return 
  703. '
  704. _UPDATETOWNFACES:
  705.  '
  706.  Screen 7 : Cls 0
  707.  For FACE=1 To TWN(WHERE,0)
  708.     '
  709.     FACEB=TWN(WHERE,FACE)
  710.     '  
  711.     Rem Create One ChapBox 
  712.     Put Block 140,0,0 : Put Block 141,0,15
  713.     Put Block 141,0,15+(8*1) : Put Block 141,0,15+(8*2)
  714.     Put Block 141,0,15+(8*3) : Put Block 141,0,15+(8*4)
  715.     Put Block 142,0,15+(8*5)
  716.     '
  717.     Rem Create Person
  718.     Put Block 132+FACES(FACEB,0),8,29
  719.     Put Block 99+FACES(FACEB,1),8,11
  720.     Put Block 103+FACES(FACEB,2),8+10,11+6
  721.     Put Block 107+FACES(FACEB,3),8+15,11+14
  722.     Put Block 111+FACES(FACEB,4),8+11,11+19
  723.     If FACES(FACEB,5)>0 : Put Block 115+FACES(FACEB,5),8+11,11+20 : End If 
  724.     If FACES(FACEB,6)>0 : Put Block 119+FACES(FACEB,6),8+5,11+18 : End If 
  725.     If FACES(FACEB,7)>0 : Put Block 123+FACES(FACEB,7),8+0,11+0 : End If 
  726.     If FACES(FACEB,8)>0 : Put Block 127+FACES(FACEB,8),8+7,11+12 : End If 
  727.     '
  728.     Screen Copy 7,0,10,46,55 To 6,10+((FACE-1)*(320/5.0)),50
  729.     '
  730.  Next FACE
  731.  Screen 6
  732.  '
  733. Return 
  734. '
  735. _FORTEDIT:
  736.  '
  737.  Screen Open 6,320,256,32,Lowres
  738.  Flash Off : Curs Off 
  739.  Get Palette 0
  740.  Pen 8 : Paper 0 : Cls 0
  741.  Ink 8,0,0
  742.  '  
  743.  Change Mouse 2
  744.  Do 
  745.   '
  746.   Screen 6 : Cls 0
  747.   Locate 0,0 : Centre "Fort Editor"
  748.   Locate 0,1 : Print "Fort ID=";WHERE
  749.   Locate 20,1 : Print "Fort Colour=";CARM(WHERE,51)
  750.   Locate 0,2 : Print "Fort Name=";CARM$(WHERE)
  751.   Locate 0,4 : Print "Max Number of Divisions=";CARM(WHERE,0)
  752.   If CARM(WHERE,0)>0
  753.      For T=0 To CARM(WHERE,0)-1
  754.         Locate 0,6+T : Print "Type=";CARM(WHERE,1+T)
  755.         Locate 20,6+T : Print "Qty=";CARM(WHERE,11+T)
  756.      Next T
  757.   End If 
  758.   Locate 0,13 : Print "Number of Archers=";CARM(WHERE,41)
  759.   Locate 0,14 : Print "OIL Flag? ";CARM(WHERE,42)
  760.   Locate 0,15 : Print "ROCKS Flag? ";CARM(WHERE,43)
  761.   Locate 0,16 : Print "BARACADE Flag? ";CARM(WHERE,44)
  762.   Locate 0,18 : Print "Type of Castle(1-5)>";CARM(WHERE,72)
  763.   '
  764.   Locate 0,28 : Centre "! E X I T !"
  765.   '
  766.   While Mouse Key=0
  767.      MX=X Screen(X Mouse) : MY=Y Screen(Y Mouse)
  768.   Wend 
  769.   '
  770.   Gosub _EDITFORTBITS
  771.   '
  772.   While Mouse Key<>0 : Wend 
  773.   If MY>180 : Exit : End If 
  774.   '  
  775.  Loop 
  776.  '
  777.  Screen Close 6
  778.  '
  779. Return 
  780. '
  781. _EDITFORTBITS:
  782.  '
  783.  If MY>=15 and MY<23 and MX<160
  784.     Locate 0,30 : Input "Name of Fort>";CARM$(WHERE); : Cline 
  785.  End If 
  786.  If MY>=15 and MY<23 and MX>160
  787.     Locate 0,30 : Input "Empire Colour(0=neutral)>";CARM(WHERE,51); : Cline 
  788.  End If 
  789.  If MY>=(4*8) and MY<(4*8)+8
  790.     Locate 0,4 : Input "New Max Number>";CARM(WHERE,0); : Cline 
  791.  End If 
  792.  If MY>=(6*8) and MY<(6*8)+8
  793.     Locate 0,6 : Input "A >";CARM(WHERE,1); : Cline 
  794.     Locate 0,6 : Input "V >";CARM(WHERE,11); : Cline 
  795.  End If 
  796.  If MY>=(7*8) and MY<(7*8)+8
  797.     Locate 0,7 : Input "B >";CARM(WHERE,2); : Cline 
  798.     Locate 0,7 : Input "V >";CARM(WHERE,12); : Cline 
  799.  End If 
  800.  If MY>=(8*8) and MY<(8*8)+8
  801.     Locate 0,8 : Input "C >";CARM(WHERE,3); : Cline 
  802.     Locate 0,8 : Input "V >";CARM(WHERE,13); : Cline 
  803.  End If 
  804.  If MY>=(9*8) and MY<(9*8)+8
  805.     Locate 0,9 : Input "D >";CARM(WHERE,4); : Cline 
  806.     Locate 0,9 : Input "V >";CARM(WHERE,14); : Cline 
  807.  End If 
  808.  If MY>=(10*8) and MY<(10*8)+8
  809.     Locate 0,10 : Input "E >";CARM(WHERE,5); : Cline 
  810.     Locate 0,10 : Input "V >";CARM(WHERE,15); : Cline 
  811.  End If 
  812.  If MY>=(11*8) and MY<(11*8)+8
  813.     Locate 0,11 : Input "F >";CARM(WHERE,6); : Cline 
  814.     Locate 0,11 : Input "V >";CARM(WHERE,16); : Cline 
  815.  End If 
  816.  If MY>=(13*8) and MY<(13*8)+8
  817.     Locate 0,13 : Input "Number of Archers>";CARM(WHERE,41); : Cline 
  818.  End If 
  819.  If MY>=(14*8) and MY<(14*8)+8
  820.     Locate 0,14 : Input "OIL>";CARM(WHERE,42); : Cline 
  821.  End If 
  822.  If MY>=(15*8) and MY<(15*8)+8
  823.     Locate 0,15 : Input "ROCKS>";CARM(WHERE,43); : Cline 
  824.  End If 
  825.  If MY>=(16*8) and MY<(16*8)+8
  826.     Locate 0,16 : Input "BARACADE>";CARM(WHERE,44); : Cline 
  827.  End If 
  828.  If MY>=(18*8) and MY<(18*8)+8
  829.     Locate 0,18 : Input "Type (1-first fort/5-best)>";CARM(WHERE,72); : Cline 
  830.  End If 
  831.  '
  832. Return 
  833. '
  834. '
  835. '
  836. '
  837. _PATH_CLICKS:
  838.  '
  839.  If MF=0
  840.     '
  841.     If K$="c" or K$="d"
  842.        Change Mouse 3
  843.        A=GRON : Gosub _AA_FROM_A
  844.        If AA>0
  845.           X=SX+Int(MX/32) : Y=SY+Int(MY/32)
  846.           For P=0 To PLTMAX
  847.             If PLT(P,0)=AA and PLT(P,1)=X and PLT(P,2)=Y
  848.                Rem found plot 
  849.                If PATHMAX>0
  850.                   PP=PATHMAX-1
  851.                   While PP>=0
  852.                      If PATH(PP,0)=P
  853.                         Rem found last path entered
  854.                         PATHMAX=PATHMAX-1
  855.                         For PPP=PP To PATHMAX-1
  856.                           For TT=0 To 10
  857.                             PATH(PPP,TT)=PATH(PPP+1,TT)
  858.                           Next TT
  859.                         Next PPP
  860.                         PP=0
  861.                      End If 
  862.                      PP=PP-1
  863.                   Wend 
  864.                End If 
  865.             End If 
  866.           Next P
  867.        End If 
  868.        If K$="c" : Gosub _INITIAL_MAP : End If 
  869.        Change Mouse 2
  870.     End If 
  871.     '
  872.  End If 
  873.  '
  874.  If MF=1 and FMF=0
  875.     FMF=1
  876.     '
  877.     Ink 8
  878.     If PATH=0
  879.        For P=0 To PLTMAX
  880.         If MX>=((PLT(P,1)-SX)*32)+PLTOFF(PLT(P,0),0) and MX<=((PLT(P,1)-SX)*32)+PLTOFF(PLT(P,0),0)+10
  881.            If MY>=((PLT(P,2)-SY)*32)+PLTOFF(PLT(P,0),1) and MY<=((PLT(P,2)-SY)*32)+PLTOFF(PLT(P,0),1)+10
  882.               PATH=1 : PATHBIT=0
  883.               PATH(PATHMAX,0)=P : PO=P
  884.               Gr Locate((PLT(P,1)-SX)*32)+PLTOFF(PLT(P,0),0),((PLT(P,2)-SY)*32)+PLTOFF(PLT(P,0),1)
  885.            End If 
  886.         End If 
  887.        Next P
  888.     Else 
  889.     If PATH=1
  890.        PP=-1
  891.        For P=0 To PLTMAX
  892.         If MX>=((PLT(P,1)-SX)*32) and MX<=((PLT(P,1)-SX)*32)+32
  893.            If MY>=((PLT(P,2)-SY)*32) and MY<=((PLT(P,2)-SY)*32)+32
  894.               PP=P
  895.            End If 
  896.         End If 
  897.        Next P
  898.        If PP=-1
  899.           If PATHBIT<6
  900.              PATH(PATHMAX,2+PATHBIT)=SX+(MX/32)
  901.              PATH(PATHMAX,3+PATHBIT)=SY+(MY/32)
  902.              PATHBIT=PATHBIT+2
  903.              If GRONREV=1
  904.                 Draw To(Int(MX/32)*32)+BLK(GRON,0),(Int(MY/32)*32)+BLK(GRON,1)
  905.              Else 
  906.                 Draw To(Int(MX/32)*32)+31-BLK(GRON,0),(Int(MY/32)*32)+BLK(GRON,1)
  907.              End If 
  908.           End If 
  909.        Else 
  910.           PATH=0 : Ink 1 : Rem 255 end colour 
  911.           PATH(PATHMAX,2+PATHBIT)=255
  912.           PATH(PATHMAX,1)=PP
  913.           Draw To((PLT(PP,1)-SX)*32)+PLTOFF(PLT(PP,0),0),((PLT(PP,2)-SY)*32)+PLTOFF(PLT(PP,0),1)
  914.           '
  915.           Rem Maybe this path has been done before?(if so, copy into old one)  
  916.           TTT=0
  917.           For T=0 To PATHMAX
  918.             If T<PATHMAX and((PATH(T,0)=PO and PATH(T,1)=PP) or(PATH(T,1)=PO and PATH(T,0)=PP))
  919.                For TT=0 To 10
  920.                 PATH(T,TT)=PATH(PATHMAX,TT) : TTT=1
  921.                Next TT
  922.             End If 
  923.           Next T
  924.           '
  925.           If TTT=0 : PATHMAX=PATHMAX+1 : End If 
  926.           '
  927.        End If 
  928.     End If : End If 
  929.     '
  930.  End If 
  931.  '
  932.  If MF=2 and FMF=0
  933.     PATH=0 : Gosub _INITIAL_MAP
  934.  End If 
  935.  '
  936. Return 
  937. '
  938. _AA_FROM_A:
  939.  '
  940.  AA=0
  941.  If A=51 : AA=1 : End If 
  942.  If A=53 : AA=2 : End If 
  943.  If A=54 : AA=3 : End If 
  944.  If A=57 : AA=4 : End If 
  945.  If A=59 : AA=5 : End If 
  946.  If A=60 : AA=6 : End If 
  947.  If A=62 : AA=7 : End If 
  948.  If A=66 : AA=8 : End If 
  949.  If A=73 : AA=9 : End If 
  950.  If A=79 : AA=10 : End If 
  951.  '
  952. Return 
  953. '
  954. _IMAGE_CLICKS:
  955.   '
  956.    If((K$="u") or(MF=1 and GRAB>0) or(MF=2 and GRAB=0)) and FMF=0
  957.       FMF=1
  958.       '
  959.       X=((Int(MX/32))) : Y=((Int((MY-S1Y)/32)))
  960.       '
  961.       If MF=1 and GRAB>0
  962.          A=GRAB+(GRABREV*100)
  963.          '
  964.          If A>=100
  965.             If A>=101 and A<131 : UX=X : UY=Y : UE=1 : UA=MAP(SX+UX,SY+UY) : MAP(SX+X,SY+Y)=A : End If 
  966.             If A>=131 and A<151 : UX=X : UY=Y : UE=2 : UA=SEC(SX+UX,SY+UY) : SEC(SX+X,SY+Y)=A : End If 
  967.             If A>=151 and A<181 : UX=X : UY=Y : UE=3 : UA=OBJ(SX+UX,SY+UY) : OBJ(SX+X,SY+Y)=A : End If 
  968.          Else 
  969.             If A>=0 and A<31 : UX=X : UY=Y : UE=1 : UA=MAP(SX+UX,SY+UY) : MAP(SX+X,SY+Y)=A : End If 
  970.             If A>=31 and A<51 : UX=X : UY=Y : UE=2 : UA=SEC(SX+UX,SY+UY) : SEC(SX+X,SY+Y)=A : End If 
  971.             If A>=51 and A<81 : UX=X : UY=Y : UE=3 : UA=OBJ(SX+UX,SY+UY) : OBJ(SX+X,SY+Y)=A : End If 
  972.          End If 
  973.          '
  974.       End If 
  975.       If MF=2 and GRAB=0
  976.          '
  977.          If OBJ(SX+X,SY+Y)>0
  978.             If OBJ(SX+X,SY+Y)>100
  979.                GRAB=OBJ(SX+X,SY+Y)-100 : GRABREV=1
  980.             Else 
  981.                GRAB=OBJ(SX+X,SY+Y) : GRABREV=0
  982.             End If 
  983.             UX=X : UY=Y : UE=3 : UA=OBJ(SX+UX,SY+UY)
  984.             OBJ(SX+X,SY+Y)=0
  985.          Else 
  986.             If SEC(SX+X,SY+Y)>0
  987.                If SEC(SX+X,SY+Y)>100
  988.                   GRAB=SEC(SX+X,SY+Y)-100 : GRABREV=1
  989.                Else 
  990.                   GRAB=SEC(SX+X,SY+Y) : GRABREV=0
  991.                End If 
  992.                UX=X : UY=Y : UE=2 : UA=SEC(SX+UX,SY+UY)
  993.                SEC(SX+X,SY+Y)=0
  994.             Else 
  995.                If MAP(SX+X,SY+Y)>0
  996.                   If MAP(SX+X,SY+Y)>100
  997.                      GRAB=MAP(SX+X,SY+Y)-100 : GRABREV=1
  998.                   Else 
  999.                      GRAB=MAP(SX+X,SY+Y) : GRABREV=0
  1000.                   End If 
  1001.                   UX=X : UY=Y : UE=1 : UA=MAP(SX+UX,SY+UY)
  1002.                   MAP(SX+X,SY+Y)=0
  1003.          End If : End If : End If 
  1004.          '
  1005.          XX=X : YY=Y : Rem Tile copy uses same X and Y, soz!
  1006.          If GRAB>0 : Gosub _COPY_TILE : End If 
  1007.          X=XX : Y=YY
  1008.          '
  1009.       End If 
  1010.       '
  1011.       If K$="u" and UE>0
  1012.          If UE=1 : MAP(SX+UX,SY+UY)=UA : End If 
  1013.          If UE=2 : SEC(SX+UX,SY+UY)=UA : End If 
  1014.          If UE=3 : OBJ(SX+UX,SY+UY)=UA : End If 
  1015.          UE=0 : X=UX : Y=UY
  1016.       End If 
  1017.       '
  1018.       For SST=0 To 1
  1019.          Bob Clear 
  1020.          Gosub _SANDWITCH
  1021.          Bob Draw 
  1022.          Screen Swap : Wait Vbl 
  1023.       Next SST
  1024.       Bob Clear 
  1025.       '
  1026.    End If 
  1027.    '
  1028.    If(MF=1 and GRAB=0)
  1029.       '
  1030.       X=((Int(MX/32))) : Y=((Int((MY-S1Y)/32)))
  1031.       '
  1032.       GRAB=0
  1033.       If OBJ(SX+X,SY+Y)>0
  1034.          If OBJ(SX+X,SY+Y)>100
  1035.             GRAB=OBJ(SX+X,SY+Y)-100 : GRABREV=1
  1036.          Else 
  1037.             GRAB=OBJ(SX+X,SY+Y) : GRABREV=0
  1038.          End If 
  1039.       Else 
  1040.          If SEC(SX+X,SY+Y)>0
  1041.             If SEC(SX+X,SY+Y)>100
  1042.                GRAB=SEC(SX+X,SY+Y)-100 : GRABREV=1
  1043.             Else 
  1044.                GRAB=SEC(SX+X,SY+Y) : GRABREV=0
  1045.             End If 
  1046.          Else 
  1047.             If MAP(SX+X,SY+Y)>0
  1048.                If MAP(SX+X,SY+Y)>100
  1049.                   GRAB=MAP(SX+X,SY+Y)-100 : GRABREV=1
  1050.                Else 
  1051.                   GRAB=MAP(SX+X,SY+Y) : GRABREV=0
  1052.                End If 
  1053.       End If : End If : End If 
  1054.       '
  1055.       If GRAB>0
  1056.          Gosub _COPY_TILE
  1057.       End If 
  1058.       '
  1059.    End If 
  1060.   '  
  1061. Return 
  1062. '
  1063. _COPY_TILE:
  1064. '
  1065. Screen 0
  1066. Y=Int((GRAB-1)/10) : X=(GRAB-(Y*10))
  1067. Get Bob 2,(X*32)-32,(Y*32) To(X*32),(Y*32)+32
  1068. Screen 1
  1069. '
  1070. FMF=1
  1071. '
  1072. Return 
  1073. '
  1074. '
  1075. '
  1076. '
  1077. _INITIAL_MAP:
  1078. '
  1079. Bob Off 
  1080. '
  1081. Screen 1
  1082. For SST=0 To 1
  1083.    '
  1084.    Bob Clear 
  1085.    For X=0 To 10
  1086.       For Y=0 To HOS-1
  1087.          Gosub _SANDWITCH
  1088.       Next Y
  1089.    Next X
  1090.    Bob Draw 
  1091.    Screen Swap : Wait Vbl 
  1092.    '
  1093. Next SST
  1094. Bob Clear 
  1095. '
  1096. Gosub _UPDATE_PLTOFFS
  1097. '
  1098. Return 
  1099. '
  1100. _UPDATE_PLTOFFS:
  1101.  '
  1102.  If STATE=2
  1103.   Bob Off 
  1104.   For MP=0 To PLTMAX
  1105.     '
  1106.     If PLT(MP,2)>=SY and PLT(MP,2)<=SY+HOS-1
  1107.        If PLT(MP,1)>=SX and PLT(MP,1)<=SX+9
  1108.           Paste Bob((PLT(MP,1)-SX)*32)+PLTOFF(PLT(MP,0),0),((PLT(MP,2)-SY)*32)+PLTOFF(PLT(MP,0),1),12
  1109.           Gosub _DRAW_ALL_PATHS
  1110.        End If 
  1111.     End If 
  1112.     '
  1113.   Next MP
  1114.  End If 
  1115.  '
  1116. Return 
  1117. '
  1118. _DRAW_ALL_PATHS:
  1119.  '
  1120.  If PATHMAX>0
  1121.   '
  1122.   For PT=0 To(PATHMAX-1)
  1123.    '
  1124.    P=PATH(PT,0)
  1125.    PP=PATH(PT,1)
  1126.    '
  1127.    Ink 8
  1128.    Gr Locate((PLT(P,1)-SX)*32)+PLTOFF(PLT(P,0),0),((PLT(P,2)-SY)*32)+PLTOFF(PLT(P,0),1)
  1129.    GRON=0 : T=0
  1130.    While T<>999
  1131.     Rem What On? 
  1132.     X=PATH(PT,2+T) : If X>110 : X=110 : End If 
  1133.     Y=PATH(PT,3+T) : If Y>70 : Y=70 : End If 
  1134.     If OBJ(X,Y)=0
  1135.       If SEC(X,Y)=0
  1136.          If MAP(X,Y)=0
  1137.             GRON=0
  1138.          Else 
  1139.             GRON=MAP(X,Y)
  1140.          End If 
  1141.       Else 
  1142.          GRON=SEC(X,Y)
  1143.       End If 
  1144.     Else 
  1145.       GRON=OBJ(X,Y)
  1146.     End If 
  1147.     If GRON>=100 : GRONREV=2 : GRON=GRON-100 : Else GRONREV=1 : End If 
  1148.     If GRONREV=1
  1149.        Draw To(Int(PATH(PT,2+T)-SX)*32)+BLK(GRON,0),(Int(PATH(PT,3+T)-SY)*32)+BLK(GRON,1)
  1150.     Else 
  1151.        Draw To(Int(PATH(PT,2+T)-SX)*32)+31-BLK(GRON,0),(Int(PATH(PT,3+T)-SY)*32)+BLK(GRON,1)
  1152.     End If 
  1153.     Ink 9
  1154.     Rem Error Trap so smooth running!
  1155.     If T<8
  1156.        If PATH(PT,2+T+2)=255
  1157.           T=999
  1158.        Else 
  1159.           T=T+2
  1160.        End If 
  1161.     Else 
  1162.        T=999
  1163.     End If 
  1164.    Wend 
  1165.    Draw To((PLT(PP,1)-SX)*32)+PLTOFF(PLT(PP,0),0),((PLT(PP,2)-SY)*32)+PLTOFF(PLT(PP,0),1)
  1166.    '
  1167.   Next PT
  1168.   '
  1169.  End If 
  1170.  '
  1171. Return 
  1172. '
  1173. _SANDWITCH:
  1174. '
  1175. PB[200+MAP(SX+X,SY+Y),(X*32),(Y*32)]
  1176. P=SEC(SX+X,SY+Y) : If P>=100 : P=P-100 : End If 
  1177. If SEC(SX+X,SY+Y)<>0 and BLK(P,2)=0 : PB[200+SEC(SX+X,SY+Y),(X*32),(Y*32)] : End If 
  1178. If OBJ(SX+X,SY+Y)<>0 : PB[200+OBJ(SX+X,SY+Y),(X*32),(Y*32)] : End If 
  1179. If SEC(SX+X,SY+Y)<>0 and BLK(P,2)=1 : PB[200+SEC(SX+X,SY+Y),(X*32),(Y*32)] : End If 
  1180. '
  1181. Return 
  1182. '
  1183. '
  1184. _SAVE_WORLD:
  1185. '
  1186. Change Mouse 3
  1187. '
  1188. Rem Save using memory block method 
  1189. '
  1190. Rem REMEMBER TO INCREASE SPACE RESERVED WHEN ALTERING SQUASHED DATA! 
  1191. SIZE=((MAPW*10)*((MAPL*7)+1))*3 : Rem map space
  1192. SIZE=SIZE+2 : Rem sizeofarea space 
  1193. SIZE=SIZE+((PLTMAX+1)*4) : Rem plot space 
  1194. SIZE=SIZE+(PATHMAX*11) : Rem path space 
  1195. '
  1196. Erase 10
  1197. Reserve As Work 10,SIZE
  1198. '
  1199. Rem Reset Pointer
  1200. P=0
  1201. '
  1202. Rem Size of Map
  1203. Poke Start(10)+P,MAPW : P=P+1
  1204. Poke Start(10)+P,MAPL : P=P+1
  1205. '
  1206. Rem Map Data 
  1207. For Y=0 To(MAPL*7)
  1208.    For X=0 To((MAPW*10)-1)
  1209.       Poke Start(10)+P,MAP(X,Y) : P=P+1
  1210.       Poke Start(10)+P,SEC(X,Y) : P=P+1
  1211.       Poke Start(10)+P,OBJ(X,Y) : P=P+1
  1212.    Next X
  1213. Next Y
  1214. '
  1215. Rem Plot Data
  1216. Poke Start(10)+P,PLTMAX : P=P+1
  1217. For T=0 To PLTMAX
  1218.   For TT=0 To 3
  1219.      Poke Start(10)+P,PLT(T,TT) : P=P+1
  1220.   Next TT
  1221. Next T
  1222. '
  1223. Rem Path Data
  1224. Poke Start(10)+P,PATHMAX : P=P+1
  1225. For T=0 To(PATHMAX-1)
  1226.   For TT=0 To 10
  1227.     Poke Start(10)+P,PATH(T,TT) : P=P+1
  1228.   Next TT
  1229. Next T
  1230. '
  1231. Rem Squash Data
  1232. NEWSIZE= Extension_5_00CE(Start(10),Length(10),0,1024,0)
  1233. Bank Shrink 10 To NEWSIZE
  1234. '
  1235. Rem Save Bank and Base Info File 
  1236. FLN$=Fsel$("","World-?","Enter World Number")
  1237. '
  1238. Bsave FLN$,Start(10) To Start(10)+Length(10)
  1239. Open Out 1,FLN$+".Info"
  1240. Print #1,WORLDNAME$
  1241. Print #1,WORLDDESC$
  1242. Print #1,SIZE
  1243. Print #1,NEWSIZE
  1244. Close 1
  1245. '
  1246. Open Out 1,FLN$+".Vectors"
  1247. For T=0 To 80
  1248.   For TT=0 To 2
  1249.     Print #1,BLK(T,TT)
  1250.   Next TT
  1251. Next T
  1252. Close 1
  1253. '
  1254. Open Out 1,FLN$+".Finder"
  1255. Print #1,FINDERMAX
  1256. For T=0 To FINDERMAX
  1257.   Print #1,FPLT(T)
  1258. Next T
  1259. Print #1,SUBMAX
  1260. For T=0 To SUBMAX
  1261.   For TT=0 To 5
  1262.     Print #1,FINDER(T,TT)
  1263.   Next TT
  1264. Next T
  1265. Close 1
  1266. '
  1267. Open Out 1,FLN$+".Town"
  1268. Print #1,WHERETOWNMAX
  1269. If WHERETOWNMAX>0
  1270.  For T=1 To WHERETOWNMAX
  1271.    Print #1,TWN$(T)
  1272.    For TT=0 To 50
  1273.      Print #1,TWN(T,TT)
  1274.    Next TT
  1275.  Next T
  1276. End If 
  1277. Close 1
  1278. '
  1279. Open Out 1,FLN$+".Faces"
  1280. Print #1,PERSON
  1281. For T=1 To PERSON
  1282.  For TT=0 To 8
  1283.   Print #1,FACES(T,TT)
  1284.  Next TT
  1285. Next T
  1286. Close 1
  1287. '
  1288. Open Out 1,FLN$+".Fort"
  1289. Print #1,WHEREFORTMAX
  1290. If WHEREFORTMAX>0
  1291.  For T=1 To WHEREFORTMAX
  1292.    Print #1,CARM$(T)
  1293.    For TT=0 To 80
  1294.      Print #1,CARM(T,TT)
  1295.    Next TT
  1296.  Next T
  1297. End If 
  1298. Close 1
  1299. '
  1300. Change Mouse 2
  1301. '
  1302. Return 
  1303. '
  1304. _LOAD_WORLD:
  1305. '
  1306. Change Mouse 3
  1307. '
  1308. Rem Load using memory block method 
  1309. '
  1310. If FLN$="-1"
  1311.    FLN$="World-Jarah"
  1312. Else 
  1313.    FLN$=Fsel$("World-**","","Select World to Load")
  1314. End If 
  1315. '
  1316. Open In 1,FLN$+".Info"
  1317. Input #1,WORLDNAME$
  1318. Input #1,WORLDDESC$
  1319. Input #1,SIZE
  1320. Input #1,NEWSIZE
  1321. Close 1
  1322. '
  1323. Erase 10
  1324. Reserve As Work 10,SIZE
  1325. '
  1326. Bload FLN$,Start(10)
  1327. '
  1328. T= Extension_5_00E4(Start(10),NEWSIZE)
  1329. '
  1330. Rem Reset Pointer
  1331. P=0
  1332. '
  1333. Rem Size of Map
  1334. MAPW=Peek(Start(10)+P) : P=P+1
  1335. MAPL=Peek(Start(10)+P) : P=P+1
  1336. '
  1337. Rem Map Data 
  1338. For Y=0 To(MAPL*7)
  1339.    For X=0 To((MAPW*10)-1)
  1340.       MAP(X,Y)=Peek(Start(10)+P) : P=P+1
  1341.       SEC(X,Y)=Peek(Start(10)+P) : P=P+1
  1342.       OBJ(X,Y)=Peek(Start(10)+P) : P=P+1
  1343.    Next X
  1344. Next Y
  1345. '
  1346. Rem Plot Data
  1347. PLTMAX=Peek(Start(10)+P) : P=P+1
  1348. For T=0 To PLTMAX
  1349.  For TT=0 To 3
  1350.     PLT(T,TT)=Peek(Start(10)+P) : P=P+1
  1351.  Next TT
  1352. Next T
  1353. '
  1354. Rem Path Data
  1355. PATHMAX=Peek(Start(10)+P) : P=P+1
  1356. For T=0 To(PATHMAX-1)
  1357.   For TT=0 To 10
  1358.     PATH(T,TT)=Peek(Start(10)+P) : P=P+1
  1359.   Next TT
  1360. Next T
  1361. '
  1362. Open In 1,FLN$+".Vectors"
  1363. For T=0 To 80
  1364.   For TT=0 To 2
  1365.     Input #1,BLK(T,TT)
  1366.   Next TT
  1367. Next T
  1368. Close 1
  1369. '
  1370. Open In 1,FLN$+".Finder"
  1371. Input #1,FINDERMAX
  1372. For T=0 To FINDERMAX
  1373.   Input #1,FPLT(T)
  1374. Next T
  1375. Input #1,SUBMAX
  1376. For T=0 To SUBMAX
  1377.   For TT=0 To 5
  1378.     Input #1,FINDER(T,TT)
  1379.   Next TT
  1380. Next T
  1381. Close 1
  1382. '
  1383. Open In 1,FLN$+".Town"
  1384. Input #1,WHERETOWNMAX
  1385. If WHERETOWNMAX>0
  1386.  For T=1 To WHERETOWNMAX
  1387.    Input #1,TWN$(T)
  1388.    For TT=0 To 50
  1389.      Input #1,TWN(T,TT)
  1390.    Next TT
  1391.  Next T
  1392. End If 
  1393. Close 1
  1394. '
  1395. Rem SEE flag used to omit certain loads while I change data! 
  1396. If SEE=SEE
  1397.    Open In 1,FLN$+".Faces"
  1398.    Input #1,PERSON
  1399.    For T=1 To PERSON
  1400.     For TT=0 To 8
  1401.      Input #1,FACES(T,TT)
  1402.     Next TT
  1403.    Next T
  1404.    Close 1
  1405. End If 
  1406. '
  1407. Open In 1,FLN$+".Fort"
  1408. Input #1,WHEREFORTMAX
  1409. If WHEREFORTMAX>0
  1410.  For T=1 To WHEREFORTMAX
  1411.    Input #1,CARM$(T)
  1412.    For TT=0 To 80
  1413.      Input #1,CARM(T,TT)
  1414.    Next TT
  1415.  Next T
  1416. End If 
  1417. Close 1
  1418. '
  1419. Gosub _INITIAL_MAP
  1420. '
  1421. Change Mouse 2
  1422. '
  1423. Return 
  1424. '
  1425. '
  1426. '
  1427. '
  1428. '
  1429. '
  1430. '
  1431. '
  1432. _GRAB_GENERAL_MAPSTUFF:
  1433. '
  1434. Screen Open 5,320,200,32,Lowres : Screen Hide 5 : Cls 2
  1435. Rem map bits (200=empty) 
  1436. Get Block 200,0,0,32,32
  1437. '
  1438. Load Iff "mapbitsv7.iff",5 : Screen Hide 5
  1439. Screen 5
  1440. '
  1441. Rem 0 land stuff - 3 tree stuff - 5 town - 6 castle stuff  
  1442. For Y=0 To 2
  1443.    For X=0 To 9
  1444.       Get Block 201+X+(Y*10),0+(X*32),0+(Y*32),32,32
  1445.    Next X
  1446. Next Y
  1447. For Y=3 To 7
  1448.    For X=0 To 9
  1449.       Get Block 201+X+(Y*10),0+(X*32),0+(Y*32),32,32,1
  1450.    Next X
  1451. Next Y
  1452. '
  1453. Screen Close 5
  1454. '
  1455. Return 
  1456. '
  1457. '
  1458. _GRAB_TOWNBITS:
  1459.  '
  1460.  Rem GSTORE tells whether already grabbed into memory!
  1461.  '
  1462.  If GSTORE<>1
  1463.     '
  1464.     GSTORE=1
  1465.     Load Iff "facebitsv2.iff",7 : Screen Hide 7
  1466.     '
  1467.     Rem 100+ (max.99)
  1468.     Rem 100-103 heads
  1469.     For X=0 To 3
  1470.       Get Block 100+X,1+(X*32),1,31,31,1
  1471.     Next X
  1472.     Rem 104-107 eyes 
  1473.     For X=0 To 3
  1474.       Get Block 104+X,1+(X*18),33,17,11,1
  1475.     Next X
  1476.     Rem 108-111 nose 
  1477.     For X=0 To 3
  1478.       Get Block 108+X,1+(X*8),45,7,7,1
  1479.     Next X
  1480.     Rem 112-115 mouth  
  1481.     For X=0 To 3
  1482.       Get Block 112+X,1+(X*14),53,13,10,1
  1483.     Next X
  1484.     Rem 116-119 tash 
  1485.     For X=0 To 3
  1486.       Get Block 116+X,1+(X*15),64,14,6,1
  1487.     Next X
  1488.     Rem 120-123 beard  
  1489.     For X=0 To 3
  1490.       Get Block 120+X,1+(X*22),71,21,14,1
  1491.     Next X
  1492.     Rem 124-127 hair 
  1493.     For X=0 To 3
  1494.       Get Block 124+X,1+(X*32),86,31,15,1
  1495.     Next X
  1496.     Rem 128-131 scars  
  1497.     For X=0 To 3
  1498.       Get Block 128+X,1+(X*20),102,19,12,1
  1499.     Next X
  1500.     '
  1501.     Rem 132-139 Occupation bodies    
  1502.     For X=0 To 4 : Rem( max. of 7 ) 
  1503.       Get Block 132+X,1+(X*32),115,31,31,1
  1504.     Next X
  1505.     '
  1506.     Rem 140 Panel Bits 
  1507.     Get Block 140,1,147,46,15,1
  1508.     Get Block 141,1,164,46,8,1
  1509.     Get Block 142,1,174,46,10,1
  1510.     '
  1511.     Rem plaque bits
  1512.     Get Block 143,1,185,24,18,1
  1513.     Get Block 144,27,185,18,18,1
  1514.     '
  1515.     Rem Who prompts
  1516.     Get Block 145,49,147,53,9
  1517.     Get Block 146,104,147,86,9
  1518.     Get Block 147,49,157,49,9
  1519.     Get Block 148,100,157,43,9
  1520.     Get Block 149,49,167,53,9
  1521.     Get Block 150,104,167,56,9
  1522.     Get Block 151,49,177,69,9
  1523.     '
  1524.     Rem Sub-Section Window Pieces
  1525.     Get Block 152,211,26,19,15,1
  1526.     Get Block 153,232,26,10,14,1
  1527.     Get Block 154,211,43,19,9,1
  1528.     Get Block 155,211,53,19,9,1
  1529.     Get Block 156,232,53,10,9,1
  1530.     '
  1531.     Rem Sub-Section Images 
  1532.     Get Block 157,129,1,29,21,1
  1533.     Get Block 158,160,1,14,15,1
  1534.     Get Block 159,176,1,9,17,1
  1535.     Get Block 160,187,1,16,16,1
  1536.     Get Block 161,205,1,16,17,1
  1537.     Get Block 162,222,1,11,19,1
  1538.     '
  1539.     Rem Sub-Section Titles 
  1540.     For Y=0 To 4
  1541.       Get Block 163+Y,129,24+(Y*11),77,10,1
  1542.     Next Y
  1543.     Rem Spy Imagebox 
  1544.     Get Block 168,4,210,91,24,1
  1545.     '
  1546.     Rem Take Fonts for Town Plaque (and any other things)  
  1547.     T=1 : A=0 : B=0
  1548.     Restore FONTTOWN1
  1549.     Read A
  1550.     While A<>-1
  1551.       Get Block 170+B,T,204,A,5,1 : TX(B)=A+1
  1552.       T=T+A+1 : B=B+1
  1553.       Read A
  1554.     Wend 
  1555.     '
  1556.  End If 
  1557.  '
  1558. Return 
  1559. '
  1560. FONTTOWN1:
  1561. Data 4,4,4,4,3,3,4,4,3,2,4,3,5,4,4,4,4,4,4,3,4,6,5,4,3,4,3,-1
  1562. '
  1563. '
  1564. _HELP_PAGE:
  1565. _HELPREDO:
  1566. SS=180
  1567. Screen Open 5,320,SS+16,32,Lowres : Screen Hide 5
  1568. Ink 1 : Bar 0,0 To 200,SS
  1569. Ink 8 : Bar 2,2 To 198,SS-2
  1570. Ink 1,8
  1571. A$="FORTRESS 2 WORLD MAKER" : Text 100-((Len(A$)*8)/2),10,A$
  1572. A$="~~~~~~~~~~~~~~~~~~~~~~" : Text 100-((Len(A$)*8)/2),18,A$
  1573. A$="[U]  = Undo           " : Text 100-((Len(A$)*8)/2),30,A$
  1574. A$="[B]  = New Image      " : Text 100-((Len(A$)*8)/2),40,A$
  1575. A$="[X]  = Flip on X-Axis " : Text 100-((Len(A$)*8)/2),50,A$
  1576. A$="[J]  = Switch Screens " : Text 100-((Len(A$)*8)/2),60,A$
  1577. A$="[L]  = Load World     " : Text 100-((Len(A$)*8)/2),70,A$
  1578. A$="[S]  = Save World     " : Text 100-((Len(A$)*8)/2),80,A$
  1579. '
  1580. If HELPMENUTYPE=0
  1581.    A$="F1  = Path Keys " : Text 100-((Len(A$)*8)/2),110,A$
  1582.    A$="F2  = Finder Keys" : Text 100-((Len(A$)*8)/2),120,A$
  1583.    A$="F3  = Place Describer" : Text 100-((Len(A$)*8)/2),130,A$
  1584. End If 
  1585. If HELPMENUTYPE=1
  1586.  A$="[P]  = Edit PathVector" : Text 100-((Len(A$)*8)/2),100,A$
  1587.  A$="[F]  = Find All Plots " : Text 100-((Len(A$)*8)/2),110,A$
  1588.  A$="[C]  = Clear Path(s)  " : Text 100-((Len(A$)*8)/2),120,A$
  1589.  A$="[A]  = Redo all Plots " : Text 100-((Len(A$)*8)/2),130,A$
  1590.  A$="[D]  = Delete One Path" : Text 100-((Len(A$)*8)/2),140,A$
  1591.  A$="[*]  = ERASE ALL PATHS" : Text 100-((Len(A$)*8)/2),150,A$
  1592.  A$="[:]  = Enter PATHMax" : Text 100-((Len(A$)*8)/2),160,A$
  1593. End If 
  1594. If HELPMENUTYPE=2
  1595.  A$="[`]  = Mark next Place" : Text 100-((Len(A$)*8)/2),100,A$
  1596.  A$="[(]  = Clear all marks" : Text 100-((Len(A$)*8)/2),110,A$
  1597.  A$="[^]  = Print mark nums" : Text 100-((Len(A$)*8)/2),120,A$
  1598.  A$="[%]  = Enter Find-List" : Text 100-((Len(A$)*8)/2),130,A$
  1599. End If 
  1600. If HELPMENUTYPE=3
  1601.  A$="[$]  = Enter PlaceData" : Text 100-((Len(A$)*8)/2),100,A$
  1602. End If 
  1603. '
  1604. Get Bob 100,0,0 To 201,SS+1
  1605. Screen Close 5
  1606. '
  1607. Rem Init Bit 
  1608. Screen To Front 2
  1609. Screen 0
  1610. Bob Clear 
  1611. Bob 1,60,(256/2)-(SS/2),100
  1612. Bob Draw 
  1613. Screen Swap : Wait Vbl 
  1614. Screen Show 0
  1615. '
  1616. QQ=0
  1617. While QQ=0 and Mouse Key=0
  1618.  K$=Inkey$ : SC=Scancode
  1619.  If SC>=80 and SC<=87
  1620.     QQ=SC-79 : Rem covers F1 to F8
  1621.  End If 
  1622. Wend 
  1623. If QQ>0
  1624.    HELPMENUTYPE=QQ
  1625.    Goto _HELPREDO
  1626. End If 
  1627. '
  1628. While Mouse Key>0 : Wend 
  1629. Bob Clear 
  1630. Bob Off 
  1631. Get Bob 100,1,1 To 2,2
  1632. Bob Draw 
  1633. Screen Swap : Wait Vbl 
  1634. Return 
  1635. '
  1636. _CHECKVARS:
  1637. Screen Open 5,320,256,2,Lowres
  1638. Screen 5
  1639. Cls 0
  1640. For T=0 To PATHMAX-1
  1641. For TT=0 To 10
  1642. Print PATH(T,TT);
  1643. Next TT
  1644. Print 
  1645. Next T
  1646. Wait Key 
  1647. Screen Close 5
  1648. Return 
  1649. '
  1650. '
  1651. Rem procedures 
  1652. '
  1653. Procedure PB[PBDEF,PBX,PBY]
  1654.    '
  1655.    If PBDEF<300
  1656.       Put Block PBDEF,PBX,PBY
  1657.    Else 
  1658.       Hrev Block PBDEF-100
  1659.       Put Block PBDEF-100,PBX,PBY
  1660.       Hrev Block PBDEF-100
  1661.    End If 
  1662.    '
  1663. End Proc